// 接口： TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里，接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

// 1. 对象接口
export interface Person {
	// 必须属性： 必须存在
	name: string
	age: number
	// 可选属性： 可有可无
	sex?: string 
	// 只读属性: 不可以更改值
	readonly code: string
	// 其他属性
	[propsName: string]: any
}

const obj: Person = {
	name: '张三',
	age: 18,
	sex: '男',
	code: '100',
	like: ['篮球', "足球"],
	desc: {
		height: 180,
		weight: '100kg'
	}
}

// obj.code = "1231231"


const obj1: Person = {
	name: '李四',
	age: 19,
	code: '120'
}

// 2. 函数接口
interface AddFn {
	(a: number, b: number): number
}

const add1: AddFn = function(a: number, b: number): number {
	return a + b
}

// 3. 可索引的类型 接口
interface BooleanArr {
	[propsName: number]: boolean | number | string
}

const arr11: string[] = ['a', 'b', 'c']
const arr1223: BooleanArr = [true, false, 123, '1231231']


// 4 类 类型